home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGMISC
/
FORTRAN1.LZH
/
CMPAR.FOR
< prev
next >
Wrap
Text File
|
1988-02-08
|
3KB
|
128 lines
SUBROUTINE CMPAR ( S1, S2, IERR )
C*
C* *******************************
C* *******************************
C* ** **
C* ** CMPAR **
C* ** **
C* *******************************
C* *******************************
C*
C* SUBPROGRAM :
C* COMPARE UNITS
C*
C* AUTHOR :
C* ART RAGOSTA
C* MS 207-5
C* AMES RESEARCH CENTER
C* MOFFETT FIELD, CA 94035
C* (415) 694-5578
C*
C* PURPOSE :
C* COMPARE THE CALCULATED UNITS WITH THE REQUESTED UNITS, IF
C* THEY ARE THE SAME, SUCCESS, OTHERWISE THE REQUESTED NON-STD
C* UNITS WERE NOT COMPATIBLE WITH THE STANDARD UNITS.
C*
C* INPUT ARGUMENTS :
C* S1 - ONE UNIT STRING
C* S2 - THE OTHER
C*
C* OUTPUT ARGUMENTS :
C* NONE
C*
C* INTERNAL WORK AREAS :
C* NONE
C*
C* COMMON BLOCKS :
C* NONE
C*
C* FILE REFERENCES :
C* NONE
C*
C* SUBPROGRAM REFERENCES :
C* NONE
C*
C* ERROR PROCESSING :
C* NONE
C*
C* TRANSPORTABILITY LIMITATIONS :
C* NONE
C*
C* ASSUMPTIONS AND RESTRICTIONS :
C* NONE
C*
C* LANGUAGE AND COMPILER :
C* ANSI FORTRAN 77
C*
C* VERSION AND DATE :
C* VERSION I.0 24-SEP-85
C*
C* CHANGE HISTORY :
C* 24-SEP-85 INITIAL VERSION
C*
C***********************************************************************
C*
CHARACTER *(*) S1, S2
CHARACTER *6 TOP(50), BOT(50), WORK
LOGICAL ERROR
C
ERROR = .FALSE.
IERR = 0
CALL CAPS ( S1 )
L = LENGTH ( S1 )
C
C --- PASS 1, REPLACE '-' WITH '*' AND '**' WITH '^'
C
J = 0
I = 1
5 IF (S1(I:I) .EQ. '-') THEN
J = J + 1
S1(J:J) = '*'
C
C --- ALL OTHER CHARACTERS EXCEPT ' ' GET COPIED
C
ELSE IF (S1(I:I) .NE. ' ') THEN
J = J + 1
S1(J:J) = S1(I:I)
ENDIF
I = I + 1
IF ( I .LE. L )GO TO 5
S1(J+1:) = ' '
C
C --- PASS 2, PARSE INTO TOKENS
C
CALL PARSE ( S1, J, TOP, NTOP, ERROR )
IF ( ERROR ) THEN
IERR = 1
RETURN
ENDIF
C
K = LENGTH(S2)
CALL PARSE ( S2, K, BOT, NBOT, ERROR )
BOT(NBOT+1) = ' '
IF ( ERROR ) THEN
IERR = 1
RETURN
ENDIF
C
C --- NOW ASCERTAIN THAT TOP AND BOT ARE FUNCTIONALLY IDENTICAL
C --- ( THOUGH NOT INFALLABLE, THIS TEST IS DONE BY SORTING THE
C --- ARRAYS AND REQUIRING THE RESULT TO BE IDENTICAL.)
C
IF ( NTOP .NE. NBOT ) THEN
IERR = 4
ELSE
CALL QSORT ( TOP, NTOP, WORK )
CALL QSORT ( BOT, NBOT, WORK )
DO 10 I = 1,NTOP
IF ( TOP(I) .NE. BOT(I) ) GO TO 20
10 CONTINUE
ENDIF
RETURN
20 IERR = 4
RETURN
END
C
C---END CMPAR
C